<?php

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

defined('MOODLE_INTERNAL') || die();

require_once($CFG->dirroot . '/grade/report/user/lib.php');
require_once($CFG->dirroot . '/lib/outputcomponents.php');
require_once($CFG->libdir . '/outputcomponents.php');


// ===================================Messages==============================

/**
 * Сохраняет сообщения в базу данных.
 * Принимает имя отправителя, текст сообщения и время отправления.
 * @param string $name            
 * @param string $data            
 * @param int $time            
 * @return bool возвращается результат работы
 */
function set_message($name, $data, $time = null) {
    global $DB;
    $result;
    
    if (empty($time)) {
        $time = time();
    }
    
    $record           = new stdClass();
    $record->name     = $name;
    $record->message  = $data;
    $record->time     = $time;
    
    if (empty($name) OR empty($data)) {
        $result = false;
    } else {
        $result = $DB->insert_record('block_gb_messages', $record);
    }
    
    return $result;
}

/** (!)
 * Возвращает сообщения из базы данных.
 * 
 * @return array|mixed|null
 */
function get_messages()
{
    global $DB;
    
    $result = $DB->get_records('block_gb_messages', array(), 'time DESC');
    
    $data = array();

    foreach ($result as $element) {
        array_push($data, $element);
    }
    
    return $data;
}

/** (???)
 * Изменяет сообщение по передаваемому id.
 * Принимает id удаляемого сообщения и текст нового сообщения.
 * @param int $id            
 * @param string $data            
 * Возвращает результат изменения.
 * @return bool|mixed|mysqli_result
 */
function update_message($id, $data)
{
    global $DB;
    
    $record          = new stdClass();
    $record->id      = $id;
    $record->message = $data;
    
    $query = "UPDATE block_gb_messages
                 SET block_gb_messages.message = '$data'
               WHERE block_gb_messages.id = $id;";
    
    $result = $DB->update_record('block_gb_messages', $record);
    return $result;
}

/** (!)
 * Удаляет сообщение по передаваемому id.
 * Возвращает результат удаления.
 * 
 * @param int $id            
 * @return bool|mixed|mysqli_result
 */
function delete_message($id) {
    global $DB;
    delete_comment($id);
    $result = ($DB->delete_records('block_gb_messages', array('id'=>$id)));
    return $result;
}

// ===================================Comments=============================

 /** (!)
  * 
 * Сохраняет комментарий в базу данных.
 * Принимает имя отправителя, 
 * @param string $name
 * текст комментария,
 * @param string $message
 * время отправления,
 * @param int $time
 * id сообщения, под которым оставлен комментарий.
 * @param int $message_id
 * Возвращает результат.
 * @return bool|mysqli_result
 */
function set_comment($name, $message, $time, $message_id)
{
    global $DB;
    
    $result;    
    
    if (empty($time)) {
        $time = time();
    }
    
    $record            = new stdClass();
    $record->name      = $name;
    $record->comment   = $message;
    $record->time      = $time;
    $record->messageid = $message_id;
    
    
    if (empty($message_id)) {
        $result = false;
    } else {
        $result = $DB->insert_record('block_gb_comments', $record);
    }
    return $result;
}

/** (!)
 * Возвращает комментарии из базы данных.
 * Принимает id сообщения, под которым оставлены комментарии. 
 * @param int $message_id            
 * @return array
 */
function get_comments($message_id) {
    global $DB;
    $result = $DB->get_records('block_gb_comments', array('messageid'=>$message_id));
    
    $data = array();

    foreach ($result as $element) {
        array_push($data, $element);
    }
    
    return $data;
}
/** (!)
 * Удаляет комментарий из базы данных.
 * Принимает id удаляемого комментария.
 * @param int $id            
 * Возвращает результат удаления.
 * @return bool|mixed|mysqli_result
 */
function delete_comment($id) {
    global $DB;
    $result = $DB->delete_records('block_gb_comments', array('id'=>$id));
    return $result;
}


// Comments

/**
 * Validate comment parameter before perform other comments actions
 *
 * @package  block_comments
 * @category comment
 *
 * @param stdClass $comment_param {
 *              context  => context the context object
 *              courseid => int course id
 *              cm       => stdClass course module object
 *              commentarea => string comment area
 *              itemid      => int itemid
 * }
 * @return boolean
 */
function block_guestbook_comment_validate($comment_param) {
    if ($comment_param->commentarea != 'page_comments') {
        throw new comment_exception('invalidcommentarea');
    }
    if ($comment_param->itemid !== 0) {
        throw new comment_exception('invalidcommentitemid');
    }
    return true;
}

/**
 * Running addtional permission check on plugins
 *
 * @package  block_comments
 * @category comment
 *
 * @param stdClass $args
 * @return array
 */
function block_guestbook_comment_permissions($args) {
    return array('post'=>true, 'view'=>true);
}

/**
 * Validate comment data before displaying comments
 *
 * @package  block_comments
 * @category comment
 *
 * @param stdClass $comment
 * @param stdClass $args
 * @return boolean
 */
function block_guestbook_comment_display($comments, $args) {
    if ($args->commentarea !== 'page_comments') {
        throw new comment_exception('invalidcommentarea');
    }
    if ($args->itemid !== 0) {
        throw new comment_exception('invalidcommentitemid');
    }
    return $comments;
}